#!/usr/bin/env python
# -*- coding: utf-8 -*-
import scrapy
from doubanmovies.items import DoubanmoviesItem


class MoviesSpiderSpider(scrapy.Spider):
    name = 'movies_spider'  # 运行名称就是这个，名称要唯一
    allowed_domains = ['movie.douban.com']  # 限制爬虫访问的网站
    start_urls = ['http://movie.douban.com/top250']   # 初始请求，用于获取起始的URL，从这个url开始

    def parse(self, response):
        try:
            # 获取数据
            for info in response.css('div.info'):  # 这里使用css 方式 获得响应的html
                item = DoubanmoviesItem()  # 之前创的字段文件
                # 标题
                title1 = info.css('span.title::text').get()
                title2 = info.css('span:nth-child(2).title::text').get()
                title3 = info.css('span.other::text').get()
                # 电影信息
                introInfo = info.css('div.bd p::text').getall()
                # 评分
                score = info.css('span.rating_num::text').get()
                # 一句话介绍
                quote = info.css('span.inq::text').get()
                # 加入item对象
                item['title'] = str(str(title1) + str(title2) + str(title3)).replace(u'\xa0', '').strip()
                item['introInfo'] = introInfo[0].replace(u'\xa0', '').strip()
                item['time'] = introInfo[1].replace(u'\xa0', '').strip()
                item['score'] = score.replace(u'\xa0', '').strip()
                item['quote'] = quote.replace(u'\xa0', '').strip()
                # print(item)
                yield item  # 这里会传到管道文件，一会配置
            # 下一页  由于是固定250个文件，点击下一页会有一个 top250?start=25&fter=
            # 所以简单的计算一下，然后发送请求获取下一页的数据
            count = 25
            while count <= 250:
                url = 'https://movie.douban.com/top250?start={count}&filter='.format(count=count)
                count += 25  # 豆瓣一页显示25条数据
                yield scrapy.Request(url, callback=self.parse)
        except Exception as e:
            print(e)
